extends Node2D

var time: float = 5
 
var print_process: bool = false

var print_process_physics: bool = false


# 当对象的脚本被实例化时调用，通常是在对象在内存中初始化后（通过GDScript中的object.new（）或C#中的new GodotObject）。
# 它也可以被定义为接受参数。此方法类似于大多数编程语言中的构造函数。
# 注意：如果_init是用必需的参数定义的，则只能直接创建带有脚本的对象。如果使用任何其他方法（如PackedScene.institute或Node.duple），脚本的初始化将失败。
func _init() -> void:
	print(self.name, "_init")
	pass

# 当节点进入场景树时调用（例如，在实例化、场景更改或在脚本中调用add_child后）。
# 如果节点有子节点，则首先调用其_enter_tree回调，然后调用子节点的回调。
func _enter_tree() -> void:
	print(self.name, "_enter_tree")
	pass
# 当节点“就绪”时调用，即当节点及其子节点都进入场景树时。如果节点有子节点，则首先触发它们的_ready回调，然后父节点将收到就绪通知。
# 通常用于初始化。对于更早的初始化，对象_可以使用init。另请参见_enter_tree。
# 注意：对于每个节点，此方法只能调用一次。从场景树中删除节点并再次添加后，_ready将不会被第二次调用。
# 这可以通过使用request_ready请求另一个调用来绕过，在再次添加节点之前，可以在任何地方调用该调用。
func _ready() -> void:
	print(self.name, "_ready")
	pass


# 在主循环的处理步骤中调用。处理发生在每一帧，并且尽可能快，因此自前一帧以来的增量时间不是恒定的。
# delta以秒为单位。仅当启用了处理时才会调用它，如果此方法被覆盖，则会自动完成处理，并且可以用set_process切换。
# 处理按照[成员进程优先级]的顺序进行，优先级较低的值首先被调用。具有相同优先级的节点按树顺序处理，或从上到下处理，如编辑器中所示（也称为按顺序遍历）。
# 对应于Object中的[常量NOTIFICATION_PROCESS]通知_通知。注意：只有当节点存在于场景树中时（即如果它不是孤立节点），才会调用此方法。
# 注意：如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frame FPS的帧率运行，增量将大于预期。
# 这样做是为了避免“死亡螺旋”的情况，在这种情况下，由于每帧物理步骤的数量不断增加，性能会直线下降。此行为会影响_process和_physics_process。
# 因此，避免使用delta进行实际秒数的时间测量。为此，请使用Time单例的方法，例如Time.get_ticks_usec。
func _process(_delta: float) -> void:
	if time > 0:
		time -= _delta
	elif time <= 0:
		print(self.name, "time over")
		queue_free()
	if !print_process:
		print(self.name, "_process")
		print_process = true
	
	pass

# 在主循环的物理处理步骤中调用。物理处理意味着帧速率与物理同步，即增量参数通常是恒定的（见下面的例外情况）。
# delta以秒为单位。它仅在启用物理处理时调用，如果此方法被覆盖，则会自动完成，并且可以通过set_physics_process切换。
# 处理按照[成员进程_物理_优先级]的顺序进行，优先级较低的值首先被调用。具有相同优先级的节点按树顺序处理，或从上到下处理，如编辑器中所示（也称为按顺序遍历）。
# 对应于对象中的[常量NOTIFICATION_PHYSICS_PROCESS]通知_通知。注意：只有当节点存在于场景树中时（即如果它不是孤立节点），才会调用此方法。
# 注意：如果以低于Engine.physics_ticks_per_second/Engine.max_physics_steps_per_frame FPS的帧率运行，增量将大于预期。
# 这样做是为了避免“死亡螺旋”的情况，在这种情况下，由于每帧物理步骤的数量不断增加，性能会直线下降。此行为会影响_process和_physics_process。
# 因此，避免使用delta进行实际秒数的时间测量。为此，请使用Time单例的方法，例如Time.get_ticks_usec。
func _physics_process(_delta: float) -> void:
	if !print_process_physics:
		print(self.name, "_physics_process")
		print_process_physics = true
	pass

# 当节点即将离开SceneTree时调用（例如，在释放、场景更改或在脚本中调用remove_child后）。
# 如果节点有子节点，则其_exit_tree回调将在所有子节点都离开树后最后被调用。
# 对应于Object中的[常量NOTIFICATION_EXIT_TREE]通知_通知和信号[信号树退出]。要在节点已经离开活动树时收到通知，请连接到[signal tree_exited]。
func _exit_tree() -> void:
	print(self.name, "_exit_tree")
	pass
